Page({
  data: {
    service: {
      _id: '',
      name: '',
      price: 0,
      unit: ''
    },
    formData: {
      serviceTime: '',
      address: '',
      contactName: '',
      contactPhone: '',
      specialRequest: ''
    },
    totalPrice: 0
  },

  onLoad(options) {
    // 获取服务ID
    const serviceId = options.id
    
    // 加载服务信息
    this.loadServiceInfo(serviceId)
    
    // 设置默认服务时间为明天上午9点
    const tomorrow = new Date()
    tomorrow.setDate(tomorrow.getDate() + 1)
    tomorrow.setHours(9, 0, 0, 0)
    
    this.setData({
      'formData.serviceTime': tomorrow.toISOString(),
      'formData.contactName': '默认用户',
      'formData.contactPhone': '13800138000'
    })
  },

  // 加载服务信息
  loadServiceInfo(serviceId) {
    // 模拟数据，实际项目中应该从云数据库获取
    const mockData = {
      _id: serviceId,
      name: '专业护理服务',
      price: 150,
      unit: '小时'
    }
    
    this.setData({
      service: mockData,
      totalPrice: mockData.price
    })
    
    // 实际项目中的云数据库查询示例
    /*
    const db = wx.cloud.database()
    db.collection('services')
      .doc(serviceId)
      .get()
      .then(res => {
        this.setData({
          service: res.data,
          totalPrice: res.data.price
        })
      })
      .catch(err => {
        console.error('获取服务信息失败', err)
        wx.showToast({
          title: '加载失败，请重试',
          icon: 'none'
        })
      })
    */
  },

  // 表单字段变更处理
  onServiceTimeChange(e) {
    this.setData({
      'formData.serviceTime': e.detail.value
    })
  },

  onAddressChange(e) {
    this.setData({
      'formData.address': e.detail.value
    })
  },

  onContactNameChange(e) {
    this.setData({
      'formData.contactName': e.detail.value
    })
  },

  onContactPhoneChange(e) {
    this.setData({
      'formData.contactPhone': e.detail.value
    })
  },

  onSpecialRequestChange(e) {
    this.setData({
      'formData.specialRequest': e.detail.value
    })
  },

  // 提交订单
  onSubmitOrder() {
    // 表单验证
    if (!this.validateForm()) {
      return
    }
    
    // 构建订单数据
    const orderData = {
      serviceId: this.data.service._id,
      serviceName: this.data.service.name,
      servicePrice: this.data.service.price,
      serviceUnit: this.data.service.unit,
      ...this.data.formData,
      status: 'pending_payment',
      createTime: new Date().toISOString(),
      updateTime: new Date().toISOString()
    }
    
    // 显示加载中
    wx.showLoading({
      title: '提交中...',
    })
    
    // 模拟提交订单，实际项目中应该调用云函数
    setTimeout(() => {
      wx.hideLoading()
      wx.showToast({
        title: '订单创建成功',
        icon: 'success'
      })
      
      // 跳转到支付页面
      wx.navigateTo({
        url: `/pages/order/payment?id=${orderData._id}`
      })
    }, 1000)
    
    // 实际项目中的云函数调用示例
    /*
    wx.cloud.callFunction({
      name: 'createOrder',
      data: orderData,
      success: res => {
        wx.hideLoading()
        wx.showToast({
          title: '订单创建成功',
          icon: 'success'
        })
        
        // 跳转到支付页面
        wx.navigateTo({
          url: `/pages/order/payment?id=${res.result._id}`
        })
      },
      fail: err => {
        wx.hideLoading()
        console.error('创建订单失败', err)
        wx.showToast({
          title: '提交失败，请重试',
          icon: 'none'
        })
      }
    })
    */
  },

  // 表单验证
  validateForm() {
    const { serviceTime, address, contactName, contactPhone } = this.data.formData
    
    if (!serviceTime) {
      wx.showToast({
        title: '请选择服务时间',
        icon: 'none'
      })
      return false
    }
    
    if (!address) {
      wx.showToast({
        title: '请输入服务地址',
        icon: 'none'
      })
      return false
    }
    
    if (!contactName) {
      wx.showToast({
        title: '请输入联系人姓名',
        icon: 'none'
      })
      return false
    }
    
    if (!contactPhone) {
      wx.showToast({
        title: '请输入联系电话',
        icon: 'none'
      })
      return false
    }
    
    // 简单验证手机号格式
    if (!/^1[3-9]\d{9}$/.test(contactPhone)) {
      wx.showToast({
        title: '请输入正确的手机号码',
        icon: 'none'
      })
      return false
    }
    
    return true
  }
})